package com.atguigu.gmall;

import java.util.concurrent.CompletableFuture;

/**
 * @author: 李旭
 * @create: 2021-07-12 11:31
 **/
public class CompletableFutureDemo1 {

    //异步编排
    public static void main(String[] args) throws Exception{

        //新的线程
        CompletableFuture<String> integerCompletableFuture = CompletableFuture.supplyAsync(() -> {
            System.out.println(Thread.currentThread().getName());
            int i = 1/0;
            return "123";
        }).whenCompleteAsync((t,u) -> {//计算完成时回调 处理异常的 处理结果的
            //参数1  t: 上一个任务的返回值
            System.out.println("t:" + t);
            //参数2  u: 上一个任务的异常
            System.out.println("u:" + u);
   /*         ForkJoinPool.commonPool-worker-1
            t:123
            u:null*/
            //
        }).exceptionally(t -> {
            //参数1  t: 上一个任务的异常
            System.out.println("exceptionally：t:" + t);
            return "hao";
        });
        //whenComplete  : 表示 当前任务使用上一个任务的线程  总结：一个线程
        // whenCompleteAsync ： 表示 当前任务使用线程池中的新的线程  总结： 二个线程

        CompletableFuture.allOf(integerCompletableFuture).join();//将主线程暂停  再继续


    }
}
